/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.datamodel;

import br.jm.financeiro.base.eao.EaoException;
import br.jm.financeiro.entity.TempAcompanhamento;
import br.jm.financeiro.entity.Usuario;
import br.jm.financeiro.sistema.eao.TempAcompanhamentoEao;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

/**
 *
 * @author joao
 */
public class LazyTempAcompanhamento extends LazyDataModel<TempAcompanhamento> {

    private List<TempAcompanhamento> datasource;
    private final TempAcompanhamentoEao tempAcompanhamentoJpa;
    private String cFiltro;
    private String cParametroSQL;
    private boolean lSorter;
    private final int dataSize;
    public HttpSession session;

    public LazyTempAcompanhamento(TempAcompanhamentoEao tempAcompanhamentoJpa) throws EaoException {
        this.tempAcompanhamentoJpa = tempAcompanhamentoJpa;
        this.dataSize = tempAcompanhamentoJpa.getCount("TempAcompanhamento"); 

    }

    @Override
    public TempAcompanhamento getRowData(String rowKey) {
        for (TempAcompanhamento tempAcompanhamento : datasource) {
            if (tempAcompanhamento.getNomFantasia().equals(rowKey)) {
                return tempAcompanhamento;
            }
        }

        return null;
    }

    @Override
    public Object getRowKey(TempAcompanhamento tempAcompanhamento) {
        return tempAcompanhamento.getNomFantasia();
    }

    @Override
    public void setRowIndex(int rowIndex) {
        /*
         * The following is in ancestor (LazyDataModel):
         * this.rowIndex = rowIndex == -1 ? rowIndex : (rowIndex % pageSize);
         */
        if (rowIndex == -1 || getPageSize() == 0) {
            super.setRowIndex(-1);
        } else {
            super.setRowIndex(rowIndex % getPageSize());
        }
    }

    @Override
    public List<TempAcompanhamento> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        session = (HttpSession) ctx.getExternalContext().getSession(false);
        String cOrder = (String) session.getAttribute("filtroOrder");
        Usuario usuario = (Usuario) session.getAttribute("usuarioAutenticado");

        this.cFiltro = " id_usuario = ".concat(usuario.getIdUsuario().toString()).concat(" ");
        List<TempAcompanhamento> data = new ArrayList<>();

        try {
            //filter
            lSorter = SortOrder.ASCENDING.equals(sortOrder);

            data = tempAcompanhamentoJpa.getNative("TempAcompanhamento", first, this.dataSize, sortField, lSorter, filters, cParametroSQL, cFiltro);

            if (!filters.isEmpty()) {
                String cWhere = " WHERE acompanhamento_id in (";

                for (TempAcompanhamento data1 : data) {
                    cWhere += data1.getAcompanhamentoId().toString().concat(",");
                }
                cWhere += "0) ";
                session.setAttribute("filtroRelatorio", cWhere);
            } else {
                session.setAttribute("filtroRelatorio", null);
            }
        
        } catch (Exception ex) {
            //Logger.getLogger(ViewAcompanhamentoProcesso.class.getName()).log(Level.SEVERE, null, ex);
        }

        this.setRowCount(dataSize);
        if (filters.isEmpty()) {
            if (data.isEmpty()) {
                this.setRowCount(0);
            } else {
                this.setRowCount(this.dataSize);
            }
        }

        return data;
    }
}
